# ==============================================
# 备忘

# * 特殊变量
# $@     表示当前规则的target名
# $^     表示当前target所依赖的所有文件
# $?     表示导致当前target需要更新的那个依赖文件
# $<     表示当前规则中的第一个依赖文件

# * 有用的函数
# wildcard		$(wildcard *.cpp src/*.cpp)
#				得到符合通配符的文件列表
# subst			$(subst cpp, o, $SRCS)
#				字符串替换，$(subst from, to, text)
# foreach		$(foreach var, $(SRCS), $(var).d)
#				列举集合里面的元素

# * 变量
# 变量以两种方式引用 $(varname) 和 ${varname}
# 两种赋值
# = (递归式)
#     foo = $(bar)
#     bar = $(ugh)
#     ugh = Huh?
#     all:;echo $(foo)
#	结果显示 Huh?
# := (直接展开)
#  就是不递归

COMPILE_PLATFORM=$(shell uname|sed -e s/_.*//|tr '[:upper:]' '[:lower:]')

MAKE = make
CC = g++
CFLAGS = -g -ggdb -I. -Wall
SRCS = main.cpp tokenhelper.cpp
OBJS = $(subst .cpp,.o, $(SRCS))
TARGET = ytags_py

# ifeq ($(COMPILE_PLATFORM),mingw32)
# 	CFLAGS += -DWIN32
# endif

default: $(TARGET)

${TARGET}: ${OBJS}
	${CC} ${OBJS} -o $(TARGET)

%.o: %.cpp
	$(CC) $(CFLAGS) $< -c -o $@

-include ${OBJS:.o=.d}

%.d: %.cpp
	@set -e; rm -f $@; \
	$(CC) -MM $(CFLAGS) $< > $@.$$$$; \
	sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
	rm -f $@.$$$$

clean:
	-rm -rf *.o *.d
